package org.facyt.vacas.entities.vacas.restricciones;

import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.facyt.vacas.entities.vacas.Componente;

/**
 * @author Virginia
 * @version 1.0
 * @created 30-sep-2009 12:02:57 p.m.
 */
@Entity
@Table(name="rest_doble", schema="vacas")
public class RestriccionDoble extends Restriccion implements RestriccionI {

	@Column(name="calculo")
	private Integer calculo;
	
	@ManyToOne()
	@JoinColumn(name = "fk_componente_2")
	private Componente componente2;

	@Column(name = "cantidad_max", columnDefinition="float4")
	private BigDecimal valorMax;

	@Column(name = "cantidad_min", columnDefinition="float4")
	private BigDecimal valorMin;


	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Componente getComponente() {
		return componente;
	}

	public void setComponente(Componente componente) {
		this.componente = componente;
	}

	public Componente getComponente2() {
		return componente2;
	}

	public void setComponente2(Componente componente2) {
		this.componente2 = componente2;
	}

	public BigDecimal getValorMax() {
		return valorMax;
	}

	public void setValorMax(BigDecimal valorMax) {
		this.valorMax = valorMax;
	}

	public BigDecimal getValorMin() {
		return valorMin;
	}

	public void setValorMin(BigDecimal valorMin) {
		this.valorMin = valorMin;
	}

	public RestriccionDoble() {

	}

	
/**
 * retorna el componente heredado.
 * @return
 */
	public Componente getComponenteById1() {
		return getComponente();
	}

	public Componente getComponenteById2() {
		return getComponente2();
	}

	/*
	 * private Float getMaxRelaEnergiaProteina(Float energiaMax) { Float
	 * valorMax = null; if(esEnergiaProteina()) { return new
	 * Float(energiaMax.floatValue() / getCantidadMAX().floatValue()); } return
	 * valorMax; }
	 * 
	 * private Float getMaxRelaCalcioFosforo(Float energiaMax) { Float valorMax
	 * = null; if(esCalcioForsforo()) { return new Float(energiaMax.floatValue()
	 * / getCantidadMAX().floatValue()); } return valorMax; } private Float
	 * getMixRelaCalcioFosforo(Float energiaMin) { Float valorMix = null;
	 * if(esCalcioForsforo()) { return new Float(energiaMin.floatValue() /
	 * getCantidadMIN().floatValue()); } return valorMix; }
	 * 
	 * private Float getMixRelaEnergiaProteina(Float energiaMin) { Float
	 * valorMix = null; if(esEnergiaProteina()) { return new
	 * Float(energiaMin.floatValue() / getCantidadMIN().floatValue()); } return
	 * valorMix; }
	 */

	// public String get_Componente() {
	// return id_Componente;
	// }
	//
	// public void set_Componente(String id_Compo) {
	// this.id_Componente = id_Compo;
	// this.setId_Componente1(id_Compo);
	// }
	//
	// public RestriccionSimple getRsimple() {
	// return rsMayorigual;
	// }
	//
	// public void setRsimple(RestriccionSimple rsimple) {
	// if (rsimple.esMenorIgual() || rsimple.esMenor()) {
	// setCantidadMAX(rsimple.getCantidad());
	// setRsMenorigual((MenorIgual) rsimple);
	// } else if (rsimple.esMayorIgual() || rsimple.esMayor()) {
	// setCantidadMIN(rsimple.getCantidad());
	// setRsMayorigual((MayorIgual) rsimple);
	// }
	// this.setId_Componente2(new
	// Long(rsimple.getM_ComponenteValor().getComponente().getId()).toString());
	// }
	//
	// public MayorIgual getRsMayorigual() {
	// return rsMayorigual;
	// }
	//
	// public void setRsMayorigual(MayorIgual rsMayorigual) {
	// this.rsMayorigual = rsMayorigual;
	// }
	//
	// public MenorIgual getRsMenorigual() {
	// return rsMenorigual;
	// }
	//
	// public void setRsMenorigual(MenorIgual rsMenorigual) {
	// this.rsMenorigual = rsMenorigual;
	// }

	/**
	 * @return
	 */
	public String getUnidadToString() {
		return "%";
	}

	/**
	 * @return
	 */
	public String getRestriccionToString() {
		return "Relacion " + getComponenteById1().getDescripcion() + " / "
				+ getComponenteById2().getDescripcion();
	}

	public Object clone() throws CloneNotSupportedException {
		RestriccionDoble rsClon = new RestriccionDoble();
		rsClon.setComponente(this.getComponente());
		rsClon.setComponente2(this.getComponente2());		
		rsClon.setEsF(this.isEsF());
		rsClon.setEsR(this.isEsR());
		rsClon.setValorMax(this.getValorMax());
		rsClon.setValorMin(this.getValorMin());
		return rsClon;
	}

	public String getToString() {
		return "[ " + getValorMin().floatValue() + " - "
				+ getValorMax().floatValue() + " ]";
	}

	public String getStringRestriccion() {
		return getRestriccionToString() + " " + getToString() + " "
				+ getRFoNada();
	}

	public boolean esMenor() {

		return false;
	}

	public boolean esMayor() {

		return false;
	}

	public boolean esMenorIgual() {

		return false;
	}

	public boolean esMayorIgual() {

		return false;
	}


	public boolean esIgual() {

		return false;
	}

	
	public boolean esDoble() {

		return true;
	}


	public boolean esSimple() {

		return false;
	}

	public boolean esRango() {

		return false;
	}

	public boolean esFA() {

		return false;
	}
	/*******metodos requeridos por el sistema anteiror***********/
	/*********para no tener uqe cambiar*/

	public BigDecimal getCantidadMIN() {
		return getValorMin();
	}

	public BigDecimal getCantidadMAX() {
		return getValorMax();
	}

	public void setCantidadMAX(BigDecimal valor) {
		setValorMax(valor);
		
	}
	
	public void setCantidadMIN(BigDecimal valor) {
		setValorMin(valor);
		
	}


}